home *** CD-ROM | disk | FTP | other *** search
/ Aminet 8 / Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso / Aminet / util / boot / TheChoice.lha / TheChoice / TheChoice.mod < prev    next >
Text File  |  1995-07-28  |  6KB  |  180 lines

  1. MODULE TheChoice;
  2. (* Version : 1.05 *)
  3. (* Author  : Carsten Wich *)
  4.  
  5. FROM SYSTEM IMPORT ADR, ADDRESS, TAG;
  6.  
  7. IMPORT art:Arts,
  8.        dd:DosD,
  9.        dl:DosL,
  10.        el:ExecL,
  11.        gtd:GadToolsD,
  12.        gtl:GadToolsL,
  13.        gd:GraphicsD,
  14.        id:IntuitionD,
  15.        il:IntuitionL,
  16.        io:InOut,
  17.        st:String,
  18.        ud:UtilityD;
  19. VAR
  20.   ScrPtr    : id.ScreenPtr;
  21.   ScrMode   : LONGINT;
  22.   ScrHght,
  23.   MaxRow,
  24.   MaxCol,
  25.   Left,
  26.   Space     : CARDINAL;
  27.   WinPtr    : id.WindowPtr;
  28.   tagBuffer : ARRAY[0..20] OF LONGINT;
  29.   SelectTxt : id.IntuiText;
  30.   Datei     : dd.FileHandlePtr;
  31.   TAttr     : gd.TextAttr;
  32.   VInfo     : ADDRESS;
  33.   NewGad    : gtd.NewGadget;
  34.   Gad       : ARRAY[0..102] OF id.GadgetPtr;
  35.   Name      : ARRAY[1..102] OF ARRAY[0..25] OF CHAR;
  36.   Script    : ARRAY[1..102] OF ARRAY[0..40] OF CHAR;
  37.   PGad      : id.GadgetPtr;
  38.   i,j,
  39.   Max,
  40.   GadNr     : CARDINAL;
  41.   Msg       : id.IntuiMessagePtr;
  42.   Suc       : LONGINT;
  43.   Buffer    : POINTER TO ARRAY[0..40] OF CHAR;
  44.   ExeStr    : ARRAY[0..68] OF CHAR;
  45.   Cancel,
  46.   End       : BOOLEAN;
  47.  
  48. BEGIN
  49.   ExeStr := 'Execute ';
  50.   End := FALSE;
  51.   Datei := dl.Open(ADR('S:TheChoice.config'),dd.oldFile);
  52.   Max := 0;
  53.   REPEAT
  54.     Buffer := dl.FGets(Datei,ADR(Name[Max+1]),26);
  55.     IF Buffer#NIL THEN
  56.       st.DeleteChar(Name[Max+1],st.Length(Name[Max+1])-1);
  57.       Buffer := dl.FGets(Datei,ADR(Script[Max+1]),41);
  58.       IF Buffer#NIL THEN
  59.         st.DeleteChar(Script[Max+1],st.Length(Script[Max+1])-1);
  60.         INC(Max)
  61.       END
  62.     END
  63.   UNTIL (Max>=102) OR (Buffer=NIL);
  64.   dl.Close(Datei);
  65.   IF Max>0 THEN
  66.     IF Max>48 THEN
  67.       ScrMode := gd.hireslaceKey;
  68.       ScrHght := 512;
  69.       MaxRow  := 34;
  70.       CASE Max OF
  71.         69..102 : MaxCol := 3;
  72.                   Left := 6;
  73.                   Space := 2 |
  74.          35..68 : MaxCol := 2;
  75.                   Left := 74;
  76.                   Space := 75 |
  77.           1..34 : MaxCol := 1;
  78.                   Left := 216;
  79.                   Space := 0 |
  80.         ELSE
  81.       END;
  82.     ELSE
  83.       ScrMode := gd.hiresKey;
  84.       ScrHght := 256;
  85.       MaxRow  := 16;
  86.       CASE Max OF
  87.         33..48 : MaxCol := 3;
  88.                  Left := 6;
  89.                  Space := 2 |
  90.         17..32 : MaxCol := 2;
  91.                  Left := 74;
  92.                  Space := 75 |
  93.          1..16 : MaxCol := 1;
  94.                  Left := 216;
  95.                  Space := 0 |
  96.         ELSE
  97.       END;
  98.     END;
  99.     TAttr.name := ADR('topaz.font');
  100.     TAttr.ySize := 8;
  101.     TAttr.flags := gd.FontFlagSet{gd.romFont};
  102.     ScrPtr := il.OpenScreenTagList(NIL,TAG(tagBuffer,
  103.                                    id.saWidth,640,
  104.                                    id.saHeight,ScrHght,
  105.                                    id.saDepth,2,
  106.                                    id.saFont,ADR(TAttr),
  107.                                    id.saDisplayID,ScrMode,
  108.                                    id.saTitle,ADR('TheChoice V1.05 - Copyright 1993-95 by Carsten Wich'),
  109.                                    id.saPens,ADR(CARDINAL{0FFFFH}),
  110.                                    ud.tagDone));
  111.     art.Assert(ScrPtr#NIL,ADR('Can not open Screen !!!'));
  112.     VInfo := gtl.GetVisualInfoA(ScrPtr,TAG(tagBuffer,ud.tagDone));
  113.     Gad[0] := NIL;
  114.     art.Assert(gtl.CreateContext(Gad[0])#NIL,ADR('Can not create Gadgets !!!'));
  115.     NewGad.width := 208;
  116.     NewGad.height := 12;
  117.     NewGad.flags := gtd.NewGadgetFlagSet{gtd.placetextIn};
  118.     NewGad.visualInfo := VInfo;
  119.     NewGad.textAttr := ScrPtr^.font;
  120.     FOR i:=0 TO MaxCol-1 DO
  121.       FOR j:=0 TO MaxRow-1 DO
  122.         IF Max>=(1+i*MaxRow+j) THEN
  123.           NewGad.leftEdge := Left+i*(208+Space);
  124.           NewGad.topEdge := 14+j*14;
  125.           NewGad.gadgetText := ADR(Name[1+i*MaxRow+j]);
  126.           NewGad.gadgetID := 1+i*MaxRow+j;
  127.           Gad[1+i*MaxRow+j] := gtl.CreateGadgetA(gtd.buttonKind,Gad[i*MaxRow+j]^,NewGad,TAG(tagBuffer,
  128.                                                                                             ud.tagDone));
  129.         END
  130.       END
  131.     END;
  132.     WinPtr := il.OpenWindowTagList(NIL,TAG(tagBuffer,
  133.                                    id.waLeft,0,
  134.                                    id.waTop,0,
  135.                                    id.waWidth,640,
  136.                                    id.waHeight,ScrHght,
  137.                                    id.waTitle,ADR('TheChoice V1.05 - Copyright 1993-95 by Carsten Wich'),
  138.                                    id.waCustomScreen,ScrPtr,
  139.                                    id.waIDCMP,id.IDCMPFlagSet{id.gadgetUp,
  140.                                                               id.closeWindow,
  141.                                                               id.vanillaKey},
  142.                                    id.waCloseGadget, TRUE,
  143.                                    id.waActivate,TRUE,
  144.                                    id.waGadgets,Gad[0],
  145.                                    ud.tagDone));
  146.     art.Assert(ScrPtr#NIL,ADR('Can not open Window !!!'));
  147.     SelectTxt.frontPen := 2;
  148.     SelectTxt.backPen := 0;
  149.     SelectTxt.drawMode := gd.DrawModeSet{gd.dm0};
  150.     SelectTxt.leftEdge := 0;
  151.     SelectTxt.topEdge := 0;
  152.     SelectTxt.iTextFont := ScrPtr^.font;
  153.     SelectTxt.iText := ADR('Select one of the above Programs to be executed');
  154.     il.PrintIText(WinPtr^.rPort,ADR(SelectTxt),132,ScrHght-14);
  155.     REPEAT
  156.       el.WaitPort(WinPtr^.userPort);
  157.       Msg := el.GetMsg(WinPtr^.userPort);
  158.       IF Msg^.class = id.IDCMPFlagSet{id.gadgetUp} THEN
  159.         PGad := Msg^.iAddress;
  160.         GadNr := PGad^.gadgetID;
  161.         End := TRUE;
  162.       ELSIF Msg^.class = id.IDCMPFlagSet{id.closeWindow} THEN
  163.         Cancel := TRUE
  164.       END;
  165.       el.ReplyMsg(Msg);
  166.     UNTIL End OR Cancel;
  167.     il.CloseWindow(WinPtr);
  168.     gtl.FreeGadgets(Gad[0]);
  169.     gtl.FreeVisualInfo(VInfo);
  170.     il.CloseScreen(ScrPtr);
  171.     IF NOT Cancel THEN
  172.       st.Concat(ExeStr, Script[GadNr]);
  173.       Suc := dl.Execute(ADR(ExeStr),NIL,NIL)
  174.     END
  175.   ELSE
  176.     io.WriteString('Bad or missing config file !!!');
  177.     io.WriteLn;
  178.   END;
  179. END TheChoice.
  180.